// Content Script - Bing搜索自动化脚本
console.log('🚀 Bing自动化脚本已加载:', window.location.href);
console.log('📍 当前页面状态:', document.readyState);
console.log('🕐 加载时间:', new Date().toLocaleTimeString());

// 搜索关键词列表
const searchKeywords = [
  // 编程语言 (80个)
  'Python编程教程', 'Java学习路线', 'C++基础入门', 'JavaScript高级编程', 'TypeScript配置',
  'Go语言并发编程', 'Rust系统编程', 'Kotlin安卓开发', 'SwiftUI教程', 'Dart语言基础',
  'PHP后端开发', 'Ruby on Rails', 'Scala函数式编程', 'Perl脚本编程', 'Lua游戏开发',
  'Haskell函数式', 'Clojure并发模型', 'Elixir分布式', 'F#科学计算', 'Assembly x86',
  'R语言数据分析', 'MATLAB工程计算', 'Julia高性能计算', 'Scala大数据处理', 'Groovy脚本',
  'VB.NET桌面应用', 'Objective-C iOS', 'SQL查询优化', 'PL/SQL数据库', 'Transact-SQL',
  'Shell脚本编程', 'PowerShell自动化', 'VBA办公自动化', 'Ada嵌入式开发', 'COBOL金融系统',
  'Fortran科学计算', 'Prolog人工智能', 'Lisp符号计算', 'Smalltalk面向对象', 'Erlang通信',
  'Racket语言教学', 'Scheme解释器', 'OCaml函数式', 'Rust安全编程', 'Go微服务',
  'Dart Flutter', 'Kotlin协程', 'Swift Combine', 'TypeScript泛型', 'JavaScript ES6',
  'Python Django', 'Ruby Sinatra', 'PHP Laravel', 'Node.js Express', 'Spring Boot',
  'ASP.NET Core', 'Flask REST API', 'FastAPI异步', 'Gin框架使用', 'React前端开发',
  'Vue.js组件', 'Angular教程', 'Svelte编译', 'Next.js服务端', 'Nuxt.js静态',
  'jQuery选择器', 'Bootstrap响应式', 'Tailwind CSS', 'Webpack配置', 'Vite构建',
  'Babel转译器', 'ESLint代码检查', 'Prettier格式化', 'Jest测试框架', 'Mocha单元测试',
  'Cypress端到端', 'Selenium自动化', 'Puppeteer爬虫', 'GraphQL查询', 'RESTful API',

  // 人工智能与机器学习 (80个)
  '深度学习基础', '神经网络原理', '卷积神经网络CNN', '循环神经网络RNN', '长短期记忆LSTM',
  '生成对抗网络GAN', 'Transformer架构', 'BERT自然语言处理', 'GPT模型解析', '扩散模型原理',
  '强化学习Q-learning', '蒙特卡洛树搜索', '监督学习算法', '无监督学习聚类', '半监督学习应用',
  '自监督学习技巧', '多任务学习框架', '迁移学习实践', '元学习Few-shot', '联邦学习隐私',
  '计算机视觉OpenCV', '图像分类技术', '目标检测YOLO', '语义分割UNet', '实例分割Mask R-CNN',
  '姿态估计OpenPose', '人脸识别FaceNet', '图像生成Stable Diffusion', '风格迁移艺术', '超分辨率重建',
  '自然语言处理NLP', '文本分类实战', '命名实体识别', '情感分析应用', '机器翻译Transformer',
  '文本摘要生成', '问答系统搭建', '语音识别ASR', '文本转语音TTS', '聊天机器人设计',
  '推荐系统算法', '协同过滤实现', '知识图谱构建', '图神经网络GNN', '自动机器学习AutoML',
  '模型压缩量化', '神经网络剪枝', '蒸馏技术应用', '可解释AI方法', '公平机器学习',
  'AI伦理问题', '深度学习框架', 'TensorFlow教程', 'PyTorch入门', 'Keras高级API',
  'Scikit-learn机器学习', 'MXNet分布式', 'JAX加速计算', 'Hugging Face库', 'Spark MLlib',
  '模型部署实践', 'TensorFlow Serving', 'ONNX格式转换', 'Docker容器部署', 'Kubernetes编排',
  '边缘AI计算', '移动端推理', '浏览器TensorFlow.js', 'REST API服务', 'gRPC高性能',
  'MLOps实践指南', '数据版本控制', '实验跟踪管理', '模型监控报警', 'A/B测试框架',
  'AI芯片介绍', 'GPU编程CUDA', 'TPU架构分析', 'FPGA加速', '神经网络处理器',

  // 云计算与 DevOps (70个)
  '云计算基础概念', 'IaaS PaaS SaaS', '公有云私有云', '混合云架构', '多云战略规划',
  'AWS基础服务', 'EC2实例管理', 'S3存储桶', 'Lambda无服务器', 'RDS数据库',
  'Azure云平台', 'VM虚拟机部署', 'Blob存储', 'Functions函数', 'Cosmos DB',
  'Google Cloud平台', 'Compute Engine', 'Cloud Storage', 'Cloud Functions', 'BigQuery',
  '阿里云服务', 'ECS弹性计算', 'OSS对象存储', '函数计算FC', 'RDS MySQL',
  '腾讯云产品', 'CVM云服务器', 'COS存储桶', 'SCF无服务器', 'CDB数据库',
  'Docker容器化', '镜像构建优化', '容器编排基础', 'Kubernetes集群', 'Pod部署管理',
  'Service服务发现', 'Ingress网络', 'Helm包管理', 'Operator模式', '集群监控方案',
  '持续集成CI', 'Jenkins管道', 'GitLab CI/CD', 'GitHub Actions', 'Travis CI',
  '持续交付CD', '蓝绿部署', '金丝雀发布', '滚动更新策略', '自动化测试集成',
  '基础设施即代码', 'Terraform配置', 'Ansible自动化', 'Puppet配置管理', 'Chef食谱',
  '监控告警体系', 'Prometheus入门', 'Grafana仪表板', '日志管理ELK', '分布式追踪',
  '服务网格Istio', 'API网关管理', '微服务架构', 'Spring Cloud', 'Dubbo框架',
  '服务器安全防护', '防火墙配置', '漏洞扫描工具', '安全合规标准', '身份访问管理',

  // 前端开发 (70个)
  'HTML5新特性', 'CSS3动画效果', 'Flexbox布局', 'CSS Grid网格', '响应式设计',
  '移动端适配', 'REM和EM', 'Viewport单位', 'CSS变量使用', 'BEM命名规范',
  'JavaScript闭包', '原型链继承', '异步Promise', 'Async/Await', '事件循环机制',
  'DOM操作优化', 'BOM对象理解', 'Ajax请求处理', 'Fetch API使用', 'axios库',
  'ES6模块化', '箭头函数', '解构赋值', '模板字符串', '扩展运算符',
  'React Hooks', '状态管理', '组件通信', '路由配置', 'Context API',
  'Vue3组合式', '响应式原理', 'Vuex状态', 'Vue Router', '指令自定义',
  'Angular框架', '依赖注入', 'RxJS异步', 'NgModule', '服务提供',
  'Svelte编译', 'Web Components', 'Shadow DOM', '自定义元素', '模板插槽',
  '前端构建工具', '模块打包', '代码分割', '懒加载', 'Tree Shaking',
  'PWA应用', 'Service Worker', '缓存策略', '离线体验', '推送通知',
  'Web性能优化', '加载时间', '渲染阻塞', '重绘回流', '浏览器缓存',
  '前端测试', '单元测试', '集成测试', '端到端测试', '测试覆盖率',
  'TypeScript', '接口定义', '泛型编程', '类型推断', '装饰器使用',

  // 后端开发 (70个)
  'RESTful API设计', 'GraphQL入门', 'API身份验证', 'JWT令牌', 'OAuth2.0',
  '数据库设计', 'SQL优化', '事务处理', '索引原理', '锁机制',
  'MySQL安装', 'PostgreSQL', 'MongoDB', 'Redis缓存', 'Elasticsearch',
  '消息队列', 'RabbitMQ', 'Kafka原理', 'RocketMQ', 'ActiveMQ',
  '微服务架构', '服务发现', '配置中心', '熔断器', '网关路由',
  'Linux命令', 'Shell脚本', '系统监控', '日志分析', '性能调优',
  '网络协议', 'HTTP详解', 'TCP/IP', 'WebSocket', 'QUIC协议',
  '安全防护', 'SQL注入', 'XSS攻击', 'CSRF防护', 'DDos防御',
  '高并发设计', '负载均衡', '缓存策略', '数据库分库', '读写分离',
  '分布式系统', '一致性哈希', 'CAP理论', 'BASE理论', '分布式事务',
  '容器技术', '镜像构建', '网络配置', '存储卷', '安全隔离',
  'Serverless', '函数计算', '事件驱动', '冷启动', '成本优化',
  'API网关', '流量控制', '认证授权', '日志监控', '版本管理',

  // 数据科学与大数据 (70个)
  '数据分析流程', '数据清洗方法', '数据可视化', '统计分析', '假设检验',
  'Python数据分析', 'Pandas入门', 'NumPy数组', 'Matplotlib', 'Seaborn',
  'Jupyter使用', '数据挖掘算法', '关联规则', '聚类分析', '分类算法',
  '回归分析', '时间序列', '特征工程', '模型评估', '交叉验证',
  '大数据生态', 'Hadoop架构', 'HDFS原理', 'MapReduce', 'YARN资源',
  'Spark核心', 'RDD编程', 'DataFrame', 'Spark SQL', 'Streaming',
  'Flink流处理', '状态管理', '窗口函数', '容错机制', 'Exactly-Once',
  '数据仓库', '维度建模', '事实表', '维度表', 'ETL流程',
  '数据湖架构', '元数据管理', '数据治理', '数据质量', '主数据',
  '商业智能BI', '报表制作', '仪表板', 'OLAP分析', 'KPI指标',
  '机器学习库', '特征选择', '超参数调优', '自动化机器学习', '模型解释',
  '深度学习框架', '图像识别', '自然语言处理', '推荐系统', '异常检测',
  '图数据库', 'Neo4j使用', '图算法', '社交网络分析', '知识图谱',
  '数据安全', '隐私保护', '数据脱敏', '访问控制', '加密技术',

  // 网络安全 (60个)
  '网络安全基础', '渗透测试流程', '漏洞扫描', '安全评估', '风险评估',
  'Web安全', 'SQL注入防护', 'XSS攻击', 'CSRF防御', '文件上传',
  '系统安全', '权限管理', '访问控制', '安全审计', '日志分析',
  '网络防护', '防火墙配置', '入侵检测', 'VPN搭建', '流量监控',
  '加密技术', '对称加密', '非对称加密', '哈希算法', '数字签名',
  '身份认证', '多因素认证', '单点登录', 'OAuth原理', 'SAML协议',
  '移动安全', 'APP加固', '反编译', '数据存储', '通信加密',
  '云安全', '共享责任', '安全组', '网络隔离', '数据加密',
  '安全开发', '安全编码', '代码审计', '依赖检查', '漏洞修复',
  '应急响应', '事件处理', '溯源分析', '威胁情报', '恶意软件',
  '社会工程学', '钓鱼攻击', '安全意识', '培训教育', '政策法规',
  '数据隐私', 'GDPR合规', '个人信息保护', '数据跨境', '隐私设计',

  // 物联网与嵌入式 (60个)
  '物联网架构', '传感器技术', '射频识别', '近场通信', '无线传感',
  '嵌入式系统', '微控制器', 'ARM架构', '实时操作系统', '固件开发',
  'STM32编程', 'Arduino项目', '树莓派应用', 'ESP8266', 'ESP32',
  '物联网协议', 'MQTT协议', 'CoAP协议', 'HTTP/2', 'WebSocket',
  ' Zigbee技术', 'LoRaWAN', 'NB-IoT', '4G/5G', '蓝牙Mesh',
  '边缘计算', '雾计算', '云计算', '端设备', '网关设计',
  '物联网平台', 'AWS IoT', 'Azure IoT', '阿里云物联网', '腾讯云',
  '智能家居', '环境监测', '工业物联网', '智慧农业', '车联网',
  '功耗优化', '电池续航', '低功耗设计', '能量收集', '电源管理',
  '硬件安全', '安全启动', '加密芯片', '防篡改', '安全更新',
  '数据处理', '边缘分析', '数据压缩', '规则引擎', '流处理',
  '物联网标准', '开源项目', '开发框架', '调试技巧', '测试方法',

  // 区块链与加密货币 (60个)
  '区块链原理', '分布式账本', '共识机制', '工作量证明', '权益证明',
  '比特币白皮书', '以太坊智能合约', 'DeFi去中心化', 'NFT非同质化', 'Web3.0',
  '加密货币', '数字钱包', '交易流程', '挖矿原理', '交易所',
  '智能合约开发', 'Solidity语言', 'Vyper语言', 'Remix IDE', 'Truffle',
  'DApp开发', '前端集成', '事件监听', 'Gas费优化', '测试部署',
  '区块链安全', '重入攻击', '溢出漏洞', '权限控制', '形式化验证',
  '联盟链', 'Fabric框架', '多链架构', '通道设计', '隐私保护',
  '跨链技术', '原子交换', '侧链方案', '中继链', '哈希锁定',
  '数字货币', '央行数字货币', '稳定币机制', '算法稳定币', '监管政策',
  '区块链应用', '供应链金融', '存证溯源', '数字身份', '版权保护',
  'Layer2扩展', '状态通道', 'Rollup方案', 'Plasma链', '侧链',
  'DAO组织', '社区治理', '投票机制', '提案流程', '国库管理',

  // 软件开发方法 (50个)
  '敏捷开发', 'Scrum框架', '看板方法', '极限编程', '迭代开发',
  ' DevOps文化', '持续集成', '持续交付', '基础设施', '监控反馈',
  '测试驱动开发', '单元测试', '集成测试', '验收测试', '测试金字塔',
  '行为驱动开发', '用户故事', '实例化需求', '自动化测试', '协作流程',
  '精益开发', '价值流图', '消除浪费', '持续改进', '拉动系统',
  '瀑布模型', 'V模型', '螺旋模型', '迭代模型', '增量模型',
  '代码重构', '设计模式', '软件架构', '整洁代码', '代码规范',
  '版本控制', '分支策略', '代码审查', '合并请求', '冲突解决',
  '项目管理', '需求分析', '任务分解', '进度跟踪', '风险管理',
  '团队协作', '沟通机制', '知识共享', '远程工作', '工具使用',

  // 操作系统 (50个)
  'Linux命令', '文件权限', '进程管理', '网络配置', '软件安装',
  'Windows管理', '注册表编辑', '组策略', 'PowerShell', '服务优化',
  'macOS使用', '终端命令', '自动化脚本', '开发环境', '系统偏好',
  '嵌入式系统', '实时性要求', '资源限制', '交叉编译', '驱动开发',
  '虚拟化技术', '虚拟机', '容器化', '资源隔离', '性能开销',
  '内存管理', '虚拟内存', '页面置换', '内存分配', '垃圾回收',
  '进程调度', '多线程', '同步机制', '死锁避免', '并发控制',
  '文件系统', '索引结构', '日志文件', '磁盘管理', '数据恢复',
  '设备驱动', '中断处理', 'DMA传输', '即插即用', '电源管理',
  '系统安全', '用户权限', '审计日志', '漏洞修补', '入侵防护',

  // 数据库技术 (50个)
  '关系数据库', 'SQL语言', '事务特性', '范式理论', '索引优化',
  'MySQL配置', 'InnoDB引擎', '主从复制', '分库分表', '性能调优',
  'PostgreSQL', '高级数据类型', 'JSON支持', '地理信息', '全文搜索',
  'Oracle数据库', '体系结构', 'RAC集群', '数据泵', '闪回技术',
  'NoSQL数据库', '键值存储', '文档数据库', '列族存储', '图数据库',
  'NewSQL数据库', '分布式事务', '一致性协议', '高可用方案', '水平扩展',
  '数据库安全', '权限管理', '数据加密', '审计功能', '备份恢复',
  '数据仓库', 'ETL流程', '维度建模', 'OLAP操作', '星型模式',
  '大数据存储', '列式存储', '压缩算法', '数据分区', '存储格式',
  '云数据库', '托管服务', '自动扩展', '读写分离', '全球分布',

  // 移动开发 (50个)
  'Android开发', 'Activity生命周期', 'Fragment使用', '界面布局', '数据存储',
  'iOS开发', 'ViewController', 'Swift语言', '界面构建', 'Core Data',
  'React Native', '组件开发', '状态管理', '原生模块', '热更新',
  'Flutter框架', 'Dart语言', 'Widget树', '状态管理', '平台通道',
  '跨平台开发', '性能优化', '打包发布', '商店上架', '版本管理',
  '移动安全', '代码混淆', '反调试', '数据加密', '通信安全',
  '用户体验', '界面设计', '交互动画', '性能监控', '内存优化',
  '测试方法', '单元测试', 'UI测试', '云测试平台', '自动化测试',
  '混合开发', 'WebView优化', '桥接通信', '插件开发', '离线能力',
  '推送通知', '消息队列', '后台任务', '地理围栏', '传感器',

  // 游戏开发 (50个)
  'Unity引擎', 'C#脚本', '物理系统', '动画控制', '场景管理',
  'Unreal Engine', '蓝图系统', 'C++编程', '材质编辑', '光照构建',
  '游戏架构', '实体组件', '事件系统', '状态机', '行为树',
  '图形渲染', '着色器编程', '光照模型', '后处理效果', '性能优化',
  '物理模拟', '碰撞检测', '刚体动力学', '关节约束', '破坏效果',
  '人工智能', '寻路算法', '决策制定', '感知系统', '群体行为',
  '用户界面', 'HUD设计', '菜单系统', '布局适配', '输入控制',
  '音频系统', '音效管理', '背景音乐', '空间音频', '混音总线',
  '网络同步', '权威服务器', '状态同步', '帧同步', '反作弊',
  '虚拟现实', '手柄交互', '运动控制', '渲染优化', '舒适性',
  '增强现实', '图像识别', '平面检测', '光照估计', '遮挡处理',

  // 职场与软技能 (50个)
  '沟通技巧', '团队协作', '冲突解决', '有效反馈', '会议管理',
  '时间管理', '任务优先', '目标设定', '效率工具', '避免拖延',
  '问题解决', '分析思维', '创新方法', '决策制定', '风险评估',
  '项目管理', '敏捷方法', '资源分配', '进度跟踪', '风险管理',
  '领导力', '团队激励', '变革管理', '战略规划', '人才发展',
  '职业发展', '技能规划', '继续教育', '证书考取', '行业趋势',
  '简历编写', '面试技巧', '薪资谈判', '入职适应', '职业转换',
  '远程工作', '自我管理', '工具使用', '团队沟通', '工作生活',
  '公开演讲', '演示技巧', '视觉辅助', '听众互动', '内容组织',
  '压力管理', '情绪智力', '工作平衡', '心理健康', '适应变化'
];

let currentSearchIndex = 0;
let searchCount = 0;
let isRunning = false;
let maxSearches = 0;
let debugMode = true; // 开启调试模式
let usedKeywords = []; // 已使用的关键词索引
let availableKeywords = []; // 可用的关键词索引
let dateModeEnabled = true; // 日期模式开关，默认开启

// SessionStorage键名
const STORAGE_KEYS = {
  IS_RUNNING: 'bing_auto_is_running',
  SEARCH_COUNT: 'bing_auto_search_count',
  CURRENT_INDEX: 'bing_auto_current_index',
  MAX_SEARCHES: 'bing_auto_max_searches',
  START_TIME: 'bing_auto_start_time',
  USED_KEYWORDS: 'bing_auto_used_keywords',
  AVAILABLE_KEYWORDS: 'bing_auto_available_keywords',
  DATE_MODE_ENABLED: 'bing_auto_date_mode_enabled'
};

// 调试日志函数
function debugLog(message, data = null) {
  if (debugMode) {
    const timestamp = new Date().toLocaleTimeString();
    console.log(`🔍 [${timestamp}] ${message}`, data || '');
  }
}

// 保存状态到sessionStorage
function saveState() {
  const state = {
    isRunning,
    searchCount,
    currentSearchIndex,
    maxSearches,
    usedKeywords,
    availableKeywords,
    dateModeEnabled,
    startTime: Date.now()
  };

  sessionStorage.setItem(STORAGE_KEYS.IS_RUNNING, isRunning.toString());
  sessionStorage.setItem(STORAGE_KEYS.SEARCH_COUNT, searchCount.toString());
  sessionStorage.setItem(STORAGE_KEYS.CURRENT_INDEX, currentSearchIndex.toString());
  sessionStorage.setItem(STORAGE_KEYS.MAX_SEARCHES, maxSearches.toString());
  sessionStorage.setItem(STORAGE_KEYS.START_TIME, Date.now().toString());
  sessionStorage.setItem(STORAGE_KEYS.USED_KEYWORDS, JSON.stringify(usedKeywords));
  sessionStorage.setItem(STORAGE_KEYS.AVAILABLE_KEYWORDS, JSON.stringify(availableKeywords));
  sessionStorage.setItem(STORAGE_KEYS.DATE_MODE_ENABLED, dateModeEnabled.toString());

  debugLog('💾 状态已保存到sessionStorage:', state);
}

// 从sessionStorage恢复状态
function restoreState() {
  const savedIsRunning = sessionStorage.getItem(STORAGE_KEYS.IS_RUNNING);
  const savedSearchCount = sessionStorage.getItem(STORAGE_KEYS.SEARCH_COUNT);
  const savedCurrentIndex = sessionStorage.getItem(STORAGE_KEYS.CURRENT_INDEX);
  const savedMaxSearches = sessionStorage.getItem(STORAGE_KEYS.MAX_SEARCHES);
  const savedStartTime = sessionStorage.getItem(STORAGE_KEYS.START_TIME);
  const savedUsedKeywords = sessionStorage.getItem(STORAGE_KEYS.USED_KEYWORDS);
  const savedAvailableKeywords = sessionStorage.getItem(STORAGE_KEYS.AVAILABLE_KEYWORDS);
  const savedDateModeEnabled = sessionStorage.getItem(STORAGE_KEYS.DATE_MODE_ENABLED);

  if (savedIsRunning && savedIsRunning === 'true') {
    isRunning = true;
    searchCount = parseInt(savedSearchCount) || 0;
    currentSearchIndex = parseInt(savedCurrentIndex) || 0;
    maxSearches = parseInt(savedMaxSearches) || 10;
    dateModeEnabled = savedDateModeEnabled ? savedDateModeEnabled === 'true' : true;

    // 恢复关键词状态
    try {
      usedKeywords = savedUsedKeywords ? JSON.parse(savedUsedKeywords) : [];
      availableKeywords = savedAvailableKeywords ? JSON.parse(savedAvailableKeywords) : [];

      // 如果没有可用关键词，重新初始化
      if (availableKeywords.length === 0) {
        initializeKeywords();
      }
    } catch (error) {
      debugLog('❌ 恢复关键词状态失败，重新初始化:', error);
      initializeKeywords();
    }

    const startTime = parseInt(savedStartTime) || Date.now();
    const runningTime = Math.floor((Date.now() - startTime) / 1000);

    debugLog('🔄 从sessionStorage恢复状态:', {
      isRunning,
      searchCount,
      currentSearchIndex,
      maxSearches,
      usedKeywords: usedKeywords.length,
      availableKeywords: availableKeywords.length,
      runningTime: `${runningTime}秒`
    });

    // 显示恢复状态的通知
    showNotification(`恢复搜索状态: ${searchCount}/${maxSearches} 次`, 'info');
    showStatusIndicator(); // 显示状态指示器

    return true;
  }

  debugLog('📝 未找到保存的状态，使用默认值');
  return false;
}

// 清除保存的状态
function clearState() {
  Object.values(STORAGE_KEYS).forEach(key => {
    sessionStorage.removeItem(key);
  });
  debugLog('🗑️ 已清除sessionStorage中的状态');
}

// 初始化关键词列表
function initializeKeywords() {
  // 创建所有关键词的索引数组
  availableKeywords = Array.from({ length: searchKeywords.length }, (_, i) => i);
  usedKeywords = [];

  // 打乱可用关键词数组，实现随机化
  shuffleArray(availableKeywords);

  debugLog('🎲 关键词列表已初始化:', {
    totalKeywords: searchKeywords.length,
    availableKeywords: availableKeywords.length,
    usedKeywords: usedKeywords.length
  });
}

// 数组洗牌算法（Fisher-Yates）
function shuffleArray(array) {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }
  return array;
}

// 获取下一个随机不重复的关键词
function getNextKeyword() {
  // 如果没有可用关键词，重置列表
  if (availableKeywords.length === 0) {
    debugLog('🔄 所有关键词已使用完毕，重置关键词列表');
    initializeKeywords();
    showNotification('关键词列表已重置，开始新一轮搜索', 'info');
  }

  // 从可用关键词中随机选择一个
  const randomIndex = Math.floor(Math.random() * availableKeywords.length);
  const keywordIndex = availableKeywords.splice(randomIndex, 1)[0];

  // 将选中的关键词添加到已使用列表
  usedKeywords.push(keywordIndex);

  const keyword = searchKeywords[keywordIndex];

  debugLog('🎯 选择关键词:', {
    keywordIndex,
    keyword,
    remainingKeywords: availableKeywords.length,
    usedKeywords: usedKeywords.length
  });

  return keyword;
}

// 获取关键词使用统计
function getKeywordStats() {
  return {
    total: searchKeywords.length,
    used: usedKeywords.length,
    available: availableKeywords.length,
    usageRate: ((usedKeywords.length / searchKeywords.length) * 100).toFixed(1)
  };
}

// 监听来自popup的消息
chrome.runtime.onMessage.addListener(function (request, _sender, sendResponse) {
  debugLog('📨 收到popup消息:', request);

  if (request.action === 'executeAction') {
    debugLog('🎯 执行开始搜索动作');

    // 接收日期模式设置
    if (typeof request.dateModeEnabled === 'boolean') {
      dateModeEnabled = request.dateModeEnabled;
      debugLog('📅 接收到日期模式设置:', dateModeEnabled);
    }

    if (isBingSearchPage()) {
      debugLog('✅ 页面验证通过，开始自动化');
      startBingAutomation();
      sendResponse({ success: true, message: '开始执行Bing搜索自动化' });
    } else {
      debugLog('❌ 页面验证失败，不是Bing搜索页面');
      sendResponse({ success: false, message: '请先访问 https://cn.bing.com/' });
    }
  }

  if (request.action === 'stopAction') {
    debugLog('🛑 执行停止搜索动作');
    stopBingAutomation();
    sendResponse({ success: true, message: '已停止自动化脚本' });
  }

  if (request.action === 'getStatus') {
    debugLog('📊 获取当前状态请求');
    sendResponse({
      isRunning,
      searchCount,
      maxSearches,
      currentSearchIndex,
      dateModeEnabled,
      keywordStats: getKeywordStats()
    });
  }

  return true;
});

// 检查是否在Bing搜索页面
function isBingSearchPage() {
  const hostname = window.location.hostname;
  const isBing = hostname === 'cn.bing.com' || hostname === 'www.bing.com';
  debugLog('🌐 页面检查:', { hostname, isBing, url: window.location.href });
  return isBing;
}

// 开始Bing自动化
function startBingAutomation() {
  debugLog('🚀 开始自动化函数被调用');

  if (isRunning) {
    debugLog('⚠️ 脚本已在运行中，跳过启动');
    showNotification('脚本已在运行中...', 'warning');
    return;
  }

  isRunning = true;
  searchCount = 0;
  currentSearchIndex = 0;

  // 初始化关键词列表
  initializeKeywords();

  // 根据日期模式开关确定循环次数
  const currentDate = new Date().getDate();
  if (dateModeEnabled) {
    // 日期模式开启：7号及以后搜索50次，否则10次
    maxSearches = currentDate >= 7 ? 50 : 10;
  } else {
    // 日期模式关闭：固定搜索10次
    maxSearches = 10;
  }

  debugLog('📅 搜索配置:', {
    currentDate,
    dateModeEnabled,
    maxSearches,
    isRunning,
    searchCount,
    currentSearchIndex,
    keywordStats: getKeywordStats()
  });

  // 保存初始状态
  saveState();

  showNotification(`开始自动搜索，计划执行 ${maxSearches} 次`, 'info');

  // 等待页面完全加载后开始
  debugLog('⏳ 等待2秒后开始第一次搜索...');
  setTimeout(() => {
    debugLog('🎬 开始执行第一次搜索');
    performSearch();
  }, 2000);
}

// 停止自动化
function stopBingAutomation() {
  debugLog('🛑 停止自动化脚本');
  isRunning = false;
  clearState(); // 清除保存的状态

  // 移除状态指示器
  const indicator = document.getElementById('bing-auto-status');
  if (indicator) {
    indicator.remove();
  }

  showNotification('自动化脚本已停止', 'info');
}

// 执行搜索
async function performSearch() {
  debugLog('🔄 performSearch函数被调用', {
    isRunning,
    searchCount,
    maxSearches,
    currentSearchIndex,
    currentUrl: window.location.href
  });

  if (!isRunning) {
    debugLog('❌ 脚本已停止运行，退出搜索');
    return;
  }

  if (searchCount >= maxSearches) {
    debugLog('✅ 搜索完成，达到最大次数', { searchCount, maxSearches });
    isRunning = false;
    clearState(); // 清除状态

    // 移除状态指示器
    const indicator = document.getElementById('bing-auto-status');
    if (indicator) {
      indicator.remove();
    }

    showNotification(`搜索完成！共执行了 ${searchCount} 次搜索`, 'success');
    return;
  }

  try {
    debugLog('🔍 开始执行搜索操作...');

    // 检查页面状态
    debugLog('📄 当前页面信息:', {
      url: window.location.href,
      readyState: document.readyState,
      title: document.title
    });

    // 获取搜索框
    const searchBox = document.getElementById('sb_form_q');
    debugLog('📝 搜索框查找结果:', {
      found: !!searchBox,
      value: searchBox?.value,
      visible: searchBox ? window.getComputedStyle(searchBox).display !== 'none' : false
    });

    if (!searchBox) {
      debugLog('❌ 未找到搜索框元素');
      showNotification('未找到搜索框，请确保在Bing首页', 'error');
      isRunning = false;
      return;
    }

    // 清空搜索框
    const oldValue = searchBox.value;
    searchBox.value = '';
    searchBox.focus();
    debugLog('🧹 清空搜索框', { oldValue, newValue: searchBox.value });

    // 获取下一个随机不重复的关键词
    const keyword = getNextKeyword();
    debugLog('⌨️ 准备输入关键词:', {
      keyword,
      currentSearchIndex,
      keywordStats: getKeywordStats()
    });

    await typeText(searchBox, keyword);

    // 更新计数器（在搜索前更新，确保跳转后能正确恢复）
    searchCount++;
    currentSearchIndex++;

    // 保存更新后的状态
    saveState();

    debugLog('📊 搜索计数更新并保存:', { searchCount, currentSearchIndex, maxSearches });

    showNotification(`第 ${searchCount}/${maxSearches} 次搜索: ${keyword}`, 'info');
    showStatusIndicator(); // 更新状态指示器

    // 点击搜索按钮
    const searchButton = document.getElementById('sb_form_go');
    const form = document.getElementById('sb_form');

    debugLog('🔘 搜索按钮查找结果:', {
      buttonFound: !!searchButton,
      formFound: !!form,
      buttonVisible: searchButton ? window.getComputedStyle(searchButton).display !== 'none' : false
    });

    if (searchButton) {
      debugLog('👆 点击搜索按钮');
      searchButton.click();
    } else if (form) {
      debugLog('📋 提交搜索表单');
      form.submit();
    } else {
      debugLog('❌ 未找到搜索按钮或表单');
      showNotification('未找到搜索按钮，搜索可能失败', 'warning');
    }

    // 随机等待时间（3-8秒）
    const waitTime = getRandomWaitTime();
    debugLog('⏱️ 第一次等待时间:', { waitTime, seconds: waitTime / 1000 });

    setTimeout(() => {
      debugLog('⏳ 第一次等待结束，开始等待页面加载...');

      // 搜索后等待页面加载，然后继续下一次搜索
      waitForPageLoad().then(() => {
        debugLog('📄 页面加载完成，准备下一次搜索');

        // 检查页面是否发生了跳转
        debugLog('🔄 页面跳转检查:', {
          currentUrl: window.location.href,
          isSearchResultPage: window.location.href.includes('/search?')
        });

        // 再次随机等待
        const additionalWait = getRandomWaitTime();
        debugLog('⏱️ 第二次等待时间:', { additionalWait, seconds: additionalWait / 1000 });

        setTimeout(() => {
          debugLog('🔄 准备执行下一次搜索...');
          performSearch();
        }, additionalWait);
      }).catch(error => {
        debugLog('❌ 等待页面加载失败:', error);
        // 即使页面加载失败，也尝试继续下一次搜索
        setTimeout(() => {
          debugLog('🔄 强制继续下一次搜索...');
          performSearch();
        }, 3000);
      });
    }, waitTime);

  } catch (error) {
    debugLog('❌ 搜索执行错误:', error);
    console.error('搜索执行错误:', error);
    showNotification('搜索执行出错: ' + error.message, 'error');
    isRunning = false;
  }
}

// 模拟打字效果
function typeText(element, text) {
  debugLog('⌨️ 开始模拟打字:', { text, length: text.length });

  return new Promise((resolve) => {
    let index = 0;
    const typeInterval = setInterval(() => {
      if (index < text.length) {
        element.value += text[index];
        // 触发input事件
        element.dispatchEvent(new Event('input', { bubbles: true }));
        index++;

        if (index % 3 === 0) { // 每3个字符记录一次进度
          debugLog('⌨️ 打字进度:', { index, total: text.length, currentValue: element.value });
        }
      } else {
        clearInterval(typeInterval);
        debugLog('✅ 打字完成:', { finalValue: element.value });
        resolve();
      }
    }, 50 + Math.random() * 100); // 随机打字速度
  });
}

// 等待页面加载完成
function waitForPageLoad() {
  debugLog('⏳ 开始等待页面加载:', { readyState: document.readyState });

  return new Promise((resolve) => {
    if (document.readyState === 'complete') {
      debugLog('✅ 页面已完全加载');
      resolve();
    } else {
      debugLog('⏳ 页面未完全加载，添加load事件监听器');
      const loadHandler = () => {
        debugLog('✅ 页面load事件触发');
        resolve();
      };
      window.addEventListener('load', loadHandler, { once: true });

      // 添加超时机制，避免无限等待
      setTimeout(() => {
        debugLog('⚠️ 页面加载超时，强制继续');
        window.removeEventListener('load', loadHandler);
        resolve();
      }, 10000); // 10秒超时
    }
  });
}

// 获取随机等待时间（3-8秒）
function getRandomWaitTime() {
  const waitTime = Math.floor(Math.random() * 5000) + 3000;
  debugLog('🎲 生成随机等待时间:', { waitTime, seconds: waitTime / 1000 });
  return waitTime;
}

// 显示通知
function showNotification(message, type = 'info') {
  const notification = document.createElement('div');
  const colors = {
    success: '#4CAF50',
    error: '#f44336',
    warning: '#ff9800',
    info: '#2196F3'
  };

  notification.style.cssText = `
    position: fixed;
    top: 20px;
    right: 20px;
    background-color: ${colors[type]};
    color: white;
    padding: 15px 20px;
    border-radius: 5px;
    z-index: 10000;
    font-family: Arial, sans-serif;
    font-size: 14px;
    max-width: 300px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.1);
  `;
  notification.textContent = message;
  document.body.appendChild(notification);

  // 5秒后移除通知
  setTimeout(() => {
    if (notification.parentNode) {
      notification.parentNode.removeChild(notification);
    }
  }, 5000);
}

// 显示持续的状态指示器
function showStatusIndicator() {
  // 移除已存在的指示器
  const existingIndicator = document.getElementById('bing-auto-status');
  if (existingIndicator) {
    existingIndicator.remove();
  }

  if (!isRunning) return;

  const indicator = document.createElement('div');
  indicator.id = 'bing-auto-status';
  indicator.style.cssText = `
    position: fixed;
    top: 80px;
    right: 20px;
    background-color: rgba(33, 150, 243, 0.9);
    color: white;
    padding: 10px 15px;
    border-radius: 20px;
    z-index: 9999;
    font-family: Arial, sans-serif;
    font-size: 12px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.2);
    backdrop-filter: blur(10px);
  `;
  const keywordStats = getKeywordStats();
  const modeText = dateModeEnabled ? '日期模式' : '固定模式';
  indicator.innerHTML = `
    <div style="display: flex; flex-direction: column; gap: 4px;">
      <div style="display: flex; align-items: center; gap: 8px;">
        <div style="width: 8px; height: 8px; background: #4CAF50; border-radius: 50%; animation: pulse 2s infinite;"></div>
        <span>搜索进度: ${searchCount}/${maxSearches}</span>
      </div>
      <div style="font-size: 10px; opacity: 0.8;">
        关键词: ${keywordStats.used}/${keywordStats.total} (${keywordStats.usageRate}%) | ${modeText}
      </div>
    </div>
  `;

  // 添加CSS动画
  if (!document.getElementById('bing-auto-styles')) {
    const style = document.createElement('style');
    style.id = 'bing-auto-styles';
    style.textContent = `
      @keyframes pulse {
        0% { opacity: 1; }
        50% { opacity: 0.5; }
        100% { opacity: 1; }
      }
    `;
    document.head.appendChild(style);
  }

  document.body.appendChild(indicator);
}

// 页面加载完成后的初始化
if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', initialize);
} else {
  initialize();
}

function initialize() {
  debugLog('🎯 Bing自动化脚本初始化开始');

  // 如果在Bing页面，检查是否需要恢复状态
  if (isBingSearchPage()) {
    debugLog('✅ 检测到Bing搜索页面，脚本准备就绪');

    // 尝试恢复之前的状态
    const hasRestoredState = restoreState();

    if (hasRestoredState) {
      debugLog('🔄 检测到之前的搜索状态，准备继续执行');

      // 如果是搜索结果页面，等待一段时间后继续下一次搜索
      if (window.location.href.includes('/search?')) {
        debugLog('📄 当前在搜索结果页面，准备继续下一次搜索');

        // 随机等待后继续搜索
        const waitTime = getRandomWaitTime();
        setTimeout(() => {
          debugLog('⏰ 等待结束，继续执行搜索');
          performSearch();
        }, waitTime);
      } else {
        debugLog('🏠 当前在首页，立即继续搜索');
        // 如果在首页，稍等片刻后继续
        setTimeout(() => {
          performSearch();
        }, 1000);
      }
    }
  } else {
    debugLog('❌ 不是Bing搜索页面，脚本待机');
  }

  debugLog('✅ 脚本初始化完成');
}